/**
 * 
 */

/*
*Released on 28th June 2008.
*Any violations can be reported at paritosh@wikiocean.net
*What is treated as violations can be found at www.wikiocean.net/ppl1-voilations*
******************************************************************************
* The contents of this file are subject to POOL Public License 1.0 and later.
* POOL Public License is based on Affero GPL v3 and additional conditions.
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the Affero GPL v3 License at http://www.gnu.org/licenses/agpl.html
* You may obtain a copy of the POOL Public License 1.0 or later at www.wikiocean.net/license/ppl.html
* Software distributed under POOL Public License 1.0 is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Initial Developer of the Original Code is Paritosh Pungaliya (C) 2008. All Rights Reserved.
******************************************************************************
* Objective of the additional terms (license)
* 1) Is to extend the software freedom to freedom to work.
* 2) To ensure that knowledge is free from monopoly of agencies.
* 3) To avoid a situation where big corporate or investor can buy out free software groups and companies and then start milking the communities built around it.
* (this trend can be seen how the freedom is curtailed in companies that get Venture Capital funding.)
******************************************************************************
*/

package  poolint.integration;

import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author Divyesh
 *
 */
public class Trigger 
{
	public Trigger() { }
	
	String tableName = "";
	String event = "";
	String process = "";
	String trig_name = "";
	
	public Trigger(String tableName, String event, String process)
	{
		this.tableName = tableName;
		this.event = event.toUpperCase();
		this.process = process.toUpperCase();
	}
	
	/**
	 * generateTrigger() - 
	 * It will generates the trigger as per specified table name, event(After or Before) and on action(Insert, Update, delete).
	 * The general naming convention we had assumed is like we prefix the table name with "trig" word. 
	 * For example Suppose table name is pool then it will generates the trigger with named trig_pool.
	 * */
	public void generateTrigger()
	{
		trig_name = "trig_" + tableName;
		
		String triger = "CREATE DEFINER = CURRENT_USER TRIGGER " + trig_name + " " + event + " " + process + " ON Sugar." + tableName;
		triger = triger + " FOR EACH ROW BEGIN " + process + " INTO Sugar.pooltable (id, tableName, columnName, columnValue, process, updated, updatedAt, insertedAt) VALUES ";
		triger = triger + " (NEW.id, '" + tableName +"', 'id', NEW.id, '" + process.toLowerCase() +"', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); END;";

		//Postgre pgsql = new Postgre();
		//Statement stmt = pgsql.getStatement(pgsql.getConnect());
		try 
		{
			System.out.println("Trigger Definition Script : " + triger);
//			stmt.executeUpdate(triger);
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}		
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		Trigger trg = new Trigger("pooltable", "AFTER", "INSERT");
		trg.generateTrigger();
	}

}
